﻿using System;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;

using DevExpress.XtraSplashScreen;
using DevExpress.XtraEditors;
using DevExpress.XtraReports.UI;
using DevExpress.XtraGrid;

using prjKQXS_DLL;
using prjKQXS_DLL.Hop_dong;
using prjKQXS_DLL.Dal;
using prjKQXS_DLL.Bean;
using prjKQXS_Report.DMQUY;

namespace prjKQXS_UI.View
{
    public partial class frmQuy : DevExpress.XtraEditors.XtraForm
    {

        /// <summary>
        /// Giá trị biến này tự động được gán là '%' khi chọn tất cả hoặc là mã đơn vị tương ứng khi chọn cán bộ từ lueDonVi
        /// </summary>
        char MaDV = '%';

        /// <summary>
        /// TenDV (Tên đơn vị) tự động được gán khi chọn cán bộ từ lueDonVi
        /// </summary>
        string TenDV;


        #region Form ======================================================================
        public frmQuy()
        {
            InitializeComponent();
        }

        private void frmQuy_Load(object sender, EventArgs e)
        {
            datngay.DateTime = DateTime.Today;        
            loadLueDonVi();
            LoadData();
            // hiển thị dữ liệu theo đơn vị
            ucDonVi1.lueDonVi.EditValueChanged += lueDonVi_EditValueChanged;
            //sự kiện EditValueChanged lọc dữ liệu Grid
        }
        #endregion Form ===================================================================


        #region Control ===================================================================
        private void btnDong_Click(object sender, EventArgs e)
        {
            clsCommon.ExecuteQuery("delete DMQUY where Noidung = '' and Sotienthu = 0 and Sotienchi = 0 ");
            this.Close();
        }

        private DMCANBO_DAL dmcanbo_dal = new DMCANBO_DAL();
        private void btnNhap_Click(object sender, EventArgs e)
        {
            int muc = rgThanhly.SelectedIndex;
            if (muc == 0)
            {
                gvBangke.OptionsBehavior.Editable = true;
                if (btnNhap.Tag.ToString() == "BT")
                {
                    //Insert                    
                    DMQUY dmquy = new DMQUY();
                    dmquy.Madv = MaDV.ToString();
                    dmquy.Ngay = (DateTime)clsCommon.Parse(datngay.Text.Trim(), 4);
                    dmquy.Noidung = "";
                    dmcanbo_dal.InsertDMQUYnull(dmquy);
                    hihi = true;
                    LoadData();
                    gvBangke.FocusedRowHandle = ((DataTable)gcBangke.DataSource).Rows.Count - 1;
                    hihi = false;
                }
                gvBangke.Focus();
                gvBangke.FocusedRowHandle = 0;
                gvBangke.FocusedColumn = gvBangke.Columns["Sophieuthu"];
            }
            else
            {
                clsCommon.MsgBox("Hãy chọn ngày nhập rồi bấm con trỏ về mục * Ngày trước khi thêm chứng từ mới", 0);
            }        
        }
        
        private void rgThanhly_SelectedIndexChanged(object sender, EventArgs e)
        {
            LoadData();
        }
        bool isEdit = false;
        private void gvBangke_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
        {
            if (!isEdit)
            {
                try
                {
                    clsCommon.updatequy("DMQUY", e.Column.FieldName, "Where ID = " + gvBangke.GetFocusedDataRow()["ID"].ToString(), e.Value);                   
                }
                catch (Exception)
                {

                }
                Tinhtonquy();                
            }            
        }

        private void sbtnLoc_Click(object sender, EventArgs e)
        {
            if (sbtnLoc.Tag.Equals("LOC"))
            {
                sbtnLoc.Tag = "BL";
                sbtnLoc.Text = "F5. &Bỏ tìm";
                gvBangke.OptionsView.ShowAutoFilterRow = true;
            }
            else
            {
                gvBangke.OptionsView.ShowAutoFilterRow = false;
                sbtnLoc.Tag = "LOC";
                sbtnLoc.Text = "F5. &Tìm";
                gvBangke.ClearColumnsFilter();
            }
        }

        private void btnXoaall_Click(object sender, EventArgs e)
        {
            try
            {
                object o = clsCommon.getCellValue("DMQUY", "Noidung", "Where ID=" + gvBangke.GetFocusedDataRow()["ID"].ToString());
                string ma = o.ToString();
                if (clsCommon.MsgBox("Bạn có muốn xóa chứng từ: " + ma, 2) == System.Windows.Forms.DialogResult.Yes)
                {
                    clsCommon.ExecuteQuery("delete DMQUY where ID = " + gvBangke.GetFocusedDataRow()["ID"].ToString());
                    LoadData();
                }
            }
            catch
            {
            }
         }
        
        private void bntSua_Click(object sender, EventArgs e)
        {
            int muc = rgThanhly.SelectedIndex;
            if (muc == 0)
                gvBangke.OptionsBehavior.Editable = true;
            else
                clsCommon.MsgBox("Hãy chọn ngày cần sửa rồi bấm con trỏ về mục * Ngày trước khi sửa một chứng từ nào đó", 0);
        }
        
        private void btntruyen_Click(object sender, EventArgs e)
        {
            DateTime ngaythang = (DateTime)clsCommon.Parse(datngay.Text.Trim(), 4);
            BienTc.MaDV = MaDV.ToString();
            BienTc.TenDV = TenDV;
            DataTable dt = new DataTable();
            if (clsCommon.MsgBox("Có truyền báo cáo quỹ tháng " + ngaythang.Month + " về Công ty hay không ?.", 2) == DialogResult.Yes)
            {
                frmChuyenDuLieu frm = new frmChuyenDuLieu(ngaythang, BienTc.MaDV);
                frm.ShowDialog();
            }
        }

        private void btntonghopin_Click(object sender, EventArgs e)
        {
            SplashScreenManager.ShowForm(typeof(frmWaitForm));

            DateTime ngaythang = (DateTime)clsCommon.Parse(datngay.Text.Trim(), 4);
            BienTc.tungay = ngaythang;
            int muc = rgThanhly.SelectedIndex;
            if (muc == 0)
            {
                rptQuy_Ngay rpt = new rptQuy_Ngay();
                rpt.OnLoadComplete += new rptQuy_Ngay.OnLoadCompleteHandler(rpt_OnLoadComplete);
                rpt.Parameters["pNgay"].Value = ngaythang;
                rpt.Parameters["pMaDV"].Value = MaDV;
                rpt.Parameters["pTenDV"].Value = TenDV;
                rpt.ShowRibbonPreviewDialog();
            }
            else
                if (muc == 1)
                {
                    rptQuy_Thang rpt = new rptQuy_Thang();
                    rpt.OnLoadComplete += new rptQuy_Thang.OnLoadCompleteHandler(rpt_OnLoadComplete);
                    rpt.Parameters["pNgay"].Value = ngaythang;
                    rpt.Parameters["pMaDV"].Value = MaDV;
                    rpt.Parameters["pTenDV"].Value = TenDV;
                    rpt.ShowRibbonPreviewDialog();
                }
                else
                {
                    rptQuy_Nam rpt = new rptQuy_Nam();
                    rpt.OnLoadComplete += new rptQuy_Nam.OnLoadCompleteHandler(rpt_OnLoadComplete);
                    rpt.Parameters["pNgay"].Value = ngaythang;
                    rpt.Parameters["pMaDV"].Value = MaDV;
                    rpt.Parameters["pTenDV"].Value = TenDV;
                    rpt.ShowRibbonPreviewDialog();
                }
        }

        private void gvBangke_GotFocus(object sender, EventArgs e)
        {
            LoadData();
        }

        private void lueDonVi_EditValueChanged(object sender, EventArgs e)
        {
            //hiển thị dữ liệu theo đơn vị
            string madv = ucDonVi1.lueDonVi.GetColumnValue("Ma_DT").ToString().Trim();
            MaDV = madv == "TC" ? '%' : Convert.ToChar(madv);
            TenDV = ucDonVi1.lueDonVi.GetColumnValue("Ten_DT").ToString().Trim();         
            btnNhap.Enabled = MaDV != '%';
            LoadData();
        }    

        private void gvBangke_CellValueChanging(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
        {
            if (!isEdit)
            {
                try
                {
                    clsCommon.updatequy("DMQUY", e.Column.FieldName, "Where ID = " + gvBangke.GetFocusedDataRow()["ID"].ToString(), e.Value);
                }
                catch (Exception)
                {

                }
                Tinhtonquy();
            }          
        }
        #endregion Control ================================================================


        #region Function ==================================================================
        private void loadLueDonVi()
        {
            ucDonVi1.lueDonVi.Properties.DataSource = clsCommon.load_lueDonVi();

            if (BienTc.isQuanHuyen || BienTc.isThanhPho || !clsCommon.hasPermission(BienTc.UserID, (int)BienTc.eFunction.L_DonVi))
            {
                ucDonVi1.lueDonVi.ItemIndex = ucDonVi1.lueDonVi.Properties.GetDataSourceRowIndex("Ma_DT", BienTc.ma_huyen == "" ? "TC" : BienTc.ma_huyen);
                if (BienTc.isQuanHuyen || BienTc.isThanhPho) ucDonVi1.lueDonVi.Properties.ReadOnly = true;
            }
            else ucDonVi1.lueDonVi.ItemIndex = 0;
            BienTc.MaDV = ucDonVi1.lueDonVi.GetColumnValue("Ma_DT").ToString().Trim();
            LoadData();
            
        }
        private bool hihi = false;

        private HOPDONG_DAL hopdong_dal = new HOPDONG_DAL();
        private void LoadData()
        {         
            DateTime ngaythang = (DateTime)clsCommon.Parse(datngay.Text.Trim(), 4);
            int ngay = ngaythang.Day;
            int thang = ngaythang.Month;
            int nam = ngaythang.Year;
            int muc = rgThanhly.SelectedIndex;
           string madv = ucDonVi1.lueDonVi.GetColumnValue("Ma_DT").ToString();
           madv = (string.IsNullOrEmpty(madv) || madv == "TC") ? "%" : madv;
            if (muc == 1) gvBangke.OptionsBehavior.Editable = false;
            else if (muc == 2)gvBangke.OptionsBehavior.Editable = false;
            try
            {
                gcBangke.DataSource = hopdong_dal.Loadnhatky(madv, muc, ngay, thang, nam);
                Tinhtonquy();
            }
            catch (Exception)
            {
                throw;
            }
        }

        private void Tinhtonquy()
        {            
            //SqlConnection conn = new SqlConnection(BienTc.connstring);
            //decimal tongsothu = 0;
            //decimal tongsochi = 0;
            //decimal tongso = 0;
            //DateTime ngaythang = (DateTime)clsCommon.Parse(datngay.Text.Trim(), 4);
            //int nam = ngaythang.Year;            
            //try
            //{      
            //    SqlDataAdapter da = new SqlDataAdapter("Select Sotienthu, Sotienchi from DMQUY Where rtrim(Madv) = @ma and datepart(year,Ngay) = @nam", conn);
            //    da.SelectCommand.Parameters.AddWithValue("@ma", lueNhomDT.GetColumnValue("Ma_DT").ToString());
            //    da.SelectCommand.Parameters.AddWithValue("@nam", nam);                
            //    DataTable dtquy = new DataTable();
            //    da.Fill(dtquy);
            //    if (dtquy.Rows.Count > 0)
            //    {
            //    foreach (DataRow dr in dtquy.Rows)
            //    {
            //        if (dr["Sotienthu"] != null && dr["Sotienthu"].ToString().Trim() != "" && (decimal)clsCommon.Parse(dr["Sotienthu"].ToString().Trim(), 3) != 0)
            //        {
            //            tongsothu += (decimal)clsCommon.Parse(dr["Sotienthu"].ToString().Trim(), 3);
            //        }
            //        if (dr["Sotienchi"] != null && dr["Sotienchi"].ToString().Trim() != "" && (decimal)clsCommon.Parse(dr["Sotienchi"].ToString().Trim(), 3) != 0)
            //        {
            //            tongsochi += (decimal)clsCommon.Parse(dr["Sotienchi"].ToString().Trim(), 3);
            //        }                
            //    }               
            //    }
            //    tongso = tongsothu - tongsochi;
            //    lbltonquy.Text = tongso.ToString();
            //}
            //catch
            //{
            //}

            decimal TonQuy = (decimal)gvBangke.Columns["Sotienthu"].SummaryItem.SummaryValue - (decimal)gvBangke.Columns["Sotienchi"].SummaryItem.SummaryValue;
            //lbltonquy.Text = TonQuy.ToString();
            lbltonquy.Text = String.Format("{0:0,0.000}", double.Parse(TonQuy.ToString()));
        }                   
        
        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            if (keyData == Keys.F2)
            {
                btnNhap_Click(null, null);               
            }
            else if (keyData == Keys.F3)
            {
                bntSua_Click(null, null);  
            }
            else if (keyData == Keys.F4)
            {
               sbtnLoc_Click(null, null);
            }
            else if (keyData == Keys.F5)
            {
                btnXoaall_Click(null, null);
            }            
            else if (keyData == Keys.F7)
            {
                btntonghopin_Click(null, null);
            }
            else if (keyData == Keys.F7)
            {
                this.Close();
            }
            return base.ProcessCmdKey(ref msg, keyData);
        }

        private void rpt_OnLoadComplete()
        {
            SplashScreenManager.CloseForm();
        }
        #endregion Function ===============================================================

       
    }
}